package com.piano.moguyun.utils;

import android.util.Log;

/**
 * 日志打印工具
 */

public class LogUtils {

    /**
     * 是否打印d 级别及以上的信息， v 级别除外
     */
    private static boolean DEBUG  = true;

    /**
     * 是否打印错误信息
     */
    private static boolean DEBUG_ERROR = true;

    /**
     * 是否保存至SD卡
     */
    private static boolean SAVE_TO_SD = false;


    /**
     * @param DEBUG 是否打印d 级别及以上的信息， v 级别除外
     */
    public static void setDEBUG(boolean DEBUG) {
        LogUtils.DEBUG = DEBUG;
    }

    /**
     * @param debugError    是否打印错误信息
     */
    public static void setDebugError(boolean debugError) {
        DEBUG_ERROR = debugError;
    }

    /**
     * @param saveToSd  是否保存至SD卡
     */
    public static void setSaveToSd(boolean saveToSd) {
        SAVE_TO_SD = saveToSd;
    }

    /**
     * v 级别的打印信息，唯一无条件打印
     * @param tag 标签
     * @param msg 打印信息
     */
    public static void v(String tag, String msg){
        Log.i(tag, msg);
        if (SAVE_TO_SD) {
            storeLog(tag, msg);
        }
    }

    /**
     * @param tag 标签
     * @param msg 打印信息
     */
    public static void d(String tag, String msg){
        if (DEBUG) {
            Log.i(tag, msg);
            if (SAVE_TO_SD) {
                storeLog(tag, msg);
            }
        }
    }

    /**
     * @param tag 标签
     * @param msg 打印信息
     */
    public static void i(String tag, String msg) {
        if (DEBUG) {
            Log.i(tag, msg);
            if (SAVE_TO_SD) {
                storeLog(tag, msg);
            }
        }
    }

    /**
     * @param tag 标签
     * @param msg 打印信息
     */
    public static void w(String tag, String msg) {
        if (DEBUG) {
            Log.i(tag, msg);
            if (SAVE_TO_SD) {
                storeLog(tag, msg);
            }
        }
    }


    /**
     * 用于打印错误级的日志信息
     * @param tag 标签
     * @param msg 打印信息
     */
    public static void e(String tag, String msg) {
        if (DEBUG && DEBUG_ERROR) {
            Log.e(tag, msg);
            if (SAVE_TO_SD) {
                storeLog(tag, msg);
            }
        }
    }

    /**
     * 分段打印
     * @param tag
     * @param msg
     */
    public static void e2(String tag, String msg) {  //信息太长,分段打印
        //因为String的length是字符数量不是字节数量所以为了防止中文字符过多，
        //  把4*1024的MAX字节打印长度改为2001字符数
        int max_str_length = 2001 - tag.length();
        //大于4000时
        while (msg.length() > max_str_length) {
            Log.e(tag, msg.substring(0, max_str_length));
            msg = msg.substring(max_str_length);
        }
        //剩余部分
        Log.e(tag, msg);
    }
    /**
     * 用于打印异常的的日志信息
     * @param tag 标签
     * @param exception 异常
     */
    public static void e(String tag, Exception exception) {
        if (DEBUG && DEBUG_ERROR) {
            Log.e(tag, exception.getMessage());
            if (SAVE_TO_SD) {
                storeLog(tag, exception);
            }
        }
    }

    private static void storeLog(String tag, Exception exception) {
        String msg = exception.getMessage();
        storeLog(tag, msg);
    }

    /**
     * 储存日志
     * @param tag   标签
     * @param msg   消息
     */
    private static void storeLog(String tag, String msg) {
    }

    /**
     * 日志打印不全
     * @param tag
     * @param msg
     */
    public static void storI(String tag, String msg) {  //信息太长,分段打印
        //因为String的length是字符数量不是字节数量所以为了防止中文字符过多，
        //  把4*1024的MAX字节打印长度改为2001字符数
        int max_str_length = 2001 - tag.length();
        //大于4000时
        while (msg.length() > max_str_length) {
            Log.i(tag, msg.substring(0, max_str_length));
            msg = msg.substring(max_str_length);
        }
        //剩余部分
        Log.i(tag, msg);
    }

    }
